Modern data centers and high-performance computing systems use multiple servers linked together by a high-speed switching fabric, such as Ethernet® or InfiniBand®. The introduction of multiple-core servers, as well as high performance requirements in various application areas, have driven an ever-increasing demand for greater bandwidth and reduced latency in communication among the servers.
The servers (also referred to as host computers, or simply hosts) connect to the network via a network interface controller (NIC, also referred to as a network interface adapter). The NIC is typically capable of sending and receiving packets over the network, under control of the operating system and applications running on the host, while reading and writing the packet payload data directly from and to the system memory of the host computer. The NIC typically interfaces to the host complex and system memory via an input/output (I/O) expansion bus, such as the ubiquitous PCI Express® (Peripheral Component Interconnect Express) bus. Thus, each read or write operation performed by the NIC from or to the system memory involves at least one bus transaction, and frequently multiple bus transactions.